package br.ufmg.dees.insane.ui.rich.learn.util.util;

import java.text.DecimalFormat;

/**  
* Uma classe de metodos para formatacao de numeros
* 
* @author Camara, Luciana 
* @version 1.0 
* @since 27/03/05 */
public class NotacaoCientifica {
    
    /** Metodo que retorna um numero em formato de 
     * notacao cientifica normalizada x=qEn
     * onde 0.1<=q<1
     * @param num um numero double
     * @param n numero de digitos da mantissa (>=1)   
     * @return uma string com o numero normalizado */
    public static String norma(double num, int n){
        String pattern="0.";
        for (int i=0;i<n;i++) pattern+="0";
        pattern+="E0";
        DecimalFormat nf=new DecimalFormat(pattern);
        String result=nf.format(num);
        // o numero estara formato como 1.1234E12
        // separa a mantissa do expoente
        int indE=result.indexOf("E");
        String mantissa=result.substring(0,indE);        
        String exp=result.substring(indE+1,result.length());
        // monta a mantissa normalizada
        String novamantissa;
        if (num>0) novamantissa="+0.";
        else novamantissa="-0.";
        for (int i=0;i<mantissa.length()-1;i++){
            if ((mantissa.charAt(i)!=',')&&(mantissa.charAt(i)!='-'))novamantissa+=mantissa.charAt(i);
        }
        // monta o expoente somando 1 ao valor depois de E
        DecimalFormat expf=new DecimalFormat("00");
        int nex = Integer.parseInt(exp) + 1;
        if ((nex>0)||(nex==0)) exp="E+"+expf.format(nex);
        else if(nex<0) exp="E"+expf.format(nex);
        return novamantissa+exp;
    }// fim de norma
    
} // fim de NotacaoCientifica
